// 新增修改删除组合
import { ref , unref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'

// 按照惯例，组合式函数名以“use”开头
export function useAddAndEdit(reactiveObject) {
    
  const title=ref('')
  const open=ref(false)
  const form=ref({})
  const react=unref(reactiveObject)    
  
  function handleAdd(){
    title.value='新增数据';
    open.value=true;
  }
  
  // 修改
  function handlerUpdate(row){
    title.value='编辑数据'; 
    
    if(!react.primaryKey){
       ElMessage({ message: '请先定义名为primaryKey的主键值',type: 'error'})
       return;
    }
    
    if(!react.findByIdApi){
       ElMessage({ message: '请先定义名为findByIdApi的函数',type: 'error'})
       return;
    }    
    //定义主键
    //const  id= row.id    
    let id=0
    if(row){
      //它是一个变量
      id=row[react['primaryKey']]
    }else{
      // 这是一个数组[]，只取第1个值
      id=react.proxy.ids[0]
    }
    react.findByIdApi(id).then(resp=> {
      form.value= resp.data
      open.value=true;
    }) 
  }
  
  function submitForm(){  
    react.proxy.$refs["postRef"].validate(valid => {
        if (valid) {           
           const idValue=form.value[react['primaryKey']]
          if (idValue) {
            // 修改
            if(!react.updateApi){
               ElMessage({ message: '请先定义名为updateApi的函数',type: 'error'})
               return;
            }
            
            react.updateApi(form.value).then(resp=> {
              open.value=false
              ElMessage({ message: '更新数据成功',type: 'success'})
               react.proxy.getList()
             })
            
          } else {
            //新增
            
            if(!react.addApi){
               ElMessage({ message: '请先定义名为addApi的函数',type: 'error'})
               return;
            }
            
            react.addApi(form.value).then(resp=> {
              open.value=false
              ElMessage({ message: '新增数据成功',type: 'success'})
              react.proxy.getList()
            })
             
          }
        }
      });    
  }
  
  //表单取消按钮
  function cancelForm(){
    open.value = false;
    reset();
  }
  
  /** 表单重置 */
  function reset() { 
    form.value = {};
    react.proxy.$refs["postRef"].resetFields();
    if(react.proxy.initFormData && react.proxy.initFormData instanceof Function){
      react.proxy.initFormData()
    }
  }
  
  function beforeAvatarUpload(file) {
        const isJPG = (file.type === 'image/jpeg' || file.type === 'image/png');
        const isLt2M = file.size / 1024 / 1024 < 2;
  
        if (!isJPG) {
           ElMessage.error('上传头像图片只能是 JPG、PNG 格式!');
        }
        if (!isLt2M) {
           ElMessage.error('上传头像图片大小不能超过 2MB!');
        }
        return isJPG && isLt2M;
  }
  
  
  //逻辑删除
  function handlerDelete(rows){
      let removeId;
      if(rows){
        removeId=rows[react['primaryKey']] 
      }else{
        removeId=react.proxy.ids
      }
      
      //提示
       ElMessageBox.confirm(
          '确定要删除数据吗?','删除',
          {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'danger',
          }
        )
          .then(() => {
             //确认删除
             react.proxy.removeApi(removeId).then(resp=> {
                ElMessage({ message: '删除数据成功',type: 'success'})
                react.proxy.handleQuery()
             })     
          })
          .catch(() => {
          }) 
  }
  
  return {open,title,form,reset,cancelForm,submitForm,handlerUpdate,handleAdd, beforeAvatarUpload,handlerDelete}

}
